Pri pisanju sporočil na prenosne telefonu moramo vsakič, ko dve sosednji črki
pripadata isti tipki prenosnega telefona, malce počakati.
Če želimo naprimer natipkati besedilo bacil, moramo pritisniti
tipke: 2 2 (za b), 2 (za a), 2 2 2 (za c), 4 4 4 (za i), 5 5 5 (za l).
To pomeni, da moramo dvakrat malce počakati - preden natipkamo a in preden
natipkamo c.
Naloga (Popravi funkcijo)
Imamo funkcijo sms(besedilo), ki kot parameter besedilo sprejme niz
znakov angleške abecede in presledkov, vrne pa število čakanj, da lahko
natipkamo naslednji znak. Predpostavimo da besedilo vsebuje le male črke
angleške abecede. Vendar pa se je programer na žalost nekje v pisnju kode zmotil.
def sms(besedilo):
"""funkcija kot parameter besedilo dobi niz znakov in vrne število kolikokrat
moramo počakati, da natipkamo besedilo na telefon"""
cakanje = 0
tipkovnica = {' ':1, 'a':2, 'b':2, 'c':2, 'd':3, 'e':3, 'f':3, 'g':4, 'h':4,
'i': 4, 'j':5, 'k':5, 'l':5, 'm':6, 'n':6, 'o':6, 'p':7, 'q':7, 'r':7, 's':7,
't': 8, 'u':8, 'v':8, w:8, 'x':9, 'y':9, 'z':9}
if len(besedilo) < 2:
return cakanje
prejsnja = besedilo[0]
for crka in besedilo[0:]:
if tipkovnica[crka] == tipkovnica[prejsnja]:
cakanje += 1
else:
prejsnja = crka
return cakanje
Pomagaj mu poiskati napake. Popravi funkcijo tako, da bo delovala pravilno.
Argument besedilo vsebuje en niz sestavljen iz malih znakov angleške abecede
in presledkov.
Izhodni podatki
Funkcija vrne eno samo število (število čakanj).
Primer
Vhod
>>> sms('rabarbara in brokoli')
Izhod
3
Uradna rešitev
def sms(besedilo):
"""funkcija kot parameter besedilo dobi niz znakov in vrne število kolikokrat
moramo počakati, da natipkamo besedilo na telefon"""
cakanje = 0
tipkovnica = {' ':1, 'a':2, 'b':2, 'c':2, 'd':3, 'e':3, 'f':3, 'g':4, 'h':4,
'i': 4, 'j':5, 'k':5, 'l':5, 'm':6, 'n':6, 'o':6, 'p':7, 'q':7, 'r':7, 's':7,
't': 8, 'u':8, 'v':8, 'w':9, 'x':9, 'y':9, 'z':9}
if len(besedilo) < 2:
return cakanje
prejsnja = besedilo[0]
for crka in besedilo[1:]:
if tipkovnica[crka] == tipkovnica[prejsnja]:
cakanje += 1
else:
prejsnja = crka
return cakanje
2004.2.1
1. podnaloga
Naloga
Imamo funkcijo novo_zaporedje(n, vhodno_zaporedje) , ki sprejme naravno
število n in vhodno zaporedje vhodno_zaporedje, v katerem je n števil
večjih od $0$ in manjših ali enakih n (med seboj ne nujno različnih). Funkcija
gre po vrsti po vhodnem zaporedju ter v novo izhodno zaporedje doda za vsako
število novo najmanjše število, ki je večje ali enako trenutnemu številu v
vhodnem zaporedju. Če je novo število večje od n, funkcija namesto tega števila
v novo zaporedje doda najmanjše število, ki je manjše ali enako
trenutnemu številu v vhodnem zaporedju, vendar novo število še ni v izhodnem
zaporedju.
def novo_zaporedje(n, vhodno_zaporedje):
"""na podlagi vhodnega zaporedja vrne izhodno zaporedje"""
izhodno_zaporedje = []
neizpisana = {i for i in range(n)}
for st_vhodno in vhodno_zaporedje:
while True:
if st_vhodno in neizpisana:
neizpisana.remove(st_vhodno)
izhodno_zaporedje.append(st_vhodno)
break
else:
if st_vhodno <= n:
st_vhodno += 1
else:
st_vhodno = 1
return izhodno_zaporedje
Vendar pa sta se v funkciji znašli dve napaki. Poišči ju in popravi funkcijo,
da bo delovala pravilno.
Vhodni podatki
Funkcija novo_zaporedje(n, vhodno_zaporedje) sprejme število n, ki je naravno
število, in pa seznam vhodnoZaporedje dolžine n, ki vsebuje naravna števila
manjša ali enaka n.
Izhodni podatki
Funkcija vrne seznam dolžine n, ki vsebuje naravna števila glede na vhodno
zaporedje.
def novo_zaporedje(n, vhodno_zaporedje):
"""na podlagi vhodnega zaporedja vrne izhodno zaporedje"""
izhodno_zaporedje = []
neizpisana = {i + 1 for i in range(n)}
for st_vhodno in vhodno_zaporedje:
while True:
if st_vhodno in neizpisana:
neizpisana.remove(st_vhodno)
izhodno_zaporedje.append(st_vhodno)
break
else:
if st_vhodno + 1 <= n:
st_vhodno += 1
else:
st_vhodno = 1
return izhodno_zaporedje